//
// Created by jinling on 2025/6/26.
//

#include "Config.h"
#include "LogStream.h"

using namespace tmms::base;

bool Config::LoadConfig(const std::string &file)
{
    LOG_DEBUG << "config file:"<<file;
    Json::Value root;
    Json::Reader reader;
    if (!reader.parse(file,root)) //// 参数（输入流，解析后的JSON根对象）
    {
        LOG_DEBUG <<"config file:"<<file <<"parse error.";
        return false;
    }
    root["name"] = "Test";
    root["age"] = 25;
    std::cout << root.toStyledString() << std::endl;
    Json::Value nameObj = root["name"];
    if (!nameObj.isNull())
    {
        name_ =nameObj.asString();
    }

    Json::Value cpusObj = root["cpu_start"];
    if (!cpusObj.isNull())
    {
        cpu_start_ =cpusObj.asInt();
    }

    Json::Value threadsObj = root["threads"];
    if (!threadsObj.isNull())
    {
        thread_nums_ =threadsObj.asInt();
    }

    Json::Value logObj = root["log"];
    if (!logObj.isNull())
    {
        PareLogInfo(logObj);
    }
    return true;
}

bool Config::PareLogInfo(const Json::Value &root)
{
    log_info_ = std::make_shared<LogInfo>();
    Json::Value levelObj = root["level"]; //这里是用一个字符串来访问一个数组
    if (!levelObj.isNull())
    {
        log_info_->level=levelObj.asString();
    }
     levelObj = root["path"];
    if (!levelObj.isNull())
    {
        log_info_->path=levelObj.asString();
    }

     levelObj = root["name"];
    if (!levelObj.isNull())
    {
        log_info_->name=levelObj.asString();
    }
}

LogInfoPtr& Config::GetLogInfo()
{
    return log_info_;
}


bool ConfigMgr::LoadConfig(const std::string &file) //调用这个就可以使用Config类来输出
{
    LOG_DEBUG<<"load config file:"<<file;
    ConfigPtr config  = std::make_shared<Config>();
    if (config->LoadConfig(file))
    {
        std::lock_guard<std::mutex> lk(mutex_);
        config_ = config;
        return true;
    }
    return false;
}

ConfigPtr ConfigMgr::Getconfig()
{
    std::lock_guard<std::mutex> lock(mutex_);
    return config_;
}